
/*
 *Dart中没有“方法重载”概念，函数名不能重复
f1(var n1, var n2, var n3, var n4){
  print('n1=$n1, n2=$n2, n3=$n3');
  print(n1 + n2 + n3);
}
*/


f1(var n1, var n2, var n3){
  print('n1=$n1, n2=$n2, n3=$n3');
  print(n1 + n2 + n3);
}

//[]中声明可选的参数
f2([var n1, var n2, var n3]){
  print('n1=$n1, n2=$n2, n3=$n3');
  print((n1??0) + (n2??0) + (n3??0));
}

f3([int? n1, int? n2, int? n3]){
  print('n1=$n1, n2=$n2, n3=$n3');
  print((n1??0) + (n2??0) + (n3??0));
}

//给可选参数提供默认值
f4([int n1=100, int n2=200, int n3=300]){
  print('n1=$n1, n2=$n2, n3=$n3');
  print((n1??0) + (n2??0) + (n3??0));
}

//形参包含：必选参数 + 可选参数
//注意：必选参数必须在可选参数的前面
f5(int n1, [int n2=200, int n3=300]){
  print('n1=$n1, n2=$n2, n3=$n3');
  print((n1??0) + (n2??0) + (n3??0));
}

main(){
  // f1(1, 2, 3);

  // f2();
  // f2(1);
  // f2(1, 2);
  // f2(1, 2, 3);

  // f3();
  // f3(1);
  // f3(1, 2);
  // f3(1, 2, 3);

  // f4();
  // f4(1);
  // f4(1, 2);
  // f4(1, 2, 3);

  // f5();  //编译错误
  f5(1);
  f5(1, 2);
  f5(1, 2, 3);
}